package proxy.jdkproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @Description: null
 * @Project: testDemo
 * @Author: hjibo
 * @CreateDate: 2019/2/2 09:37
 * @ModificationHistory: （who whatTime doWhat）
 */

// 处理器 实现 InvocationHandler 接口
public class DemoInvocationHandler implements InvocationHandler {

    // 需要被代理的目标对象
    private Object targer;

    // 构造方法
    public DemoInvocationHandler(Object targer) {
        this.targer = targer;
    }

    // proxy：动态生成的代理类的实例对象
    // method：被代理的目标对象要执行的方法对象
    // args：被代理的目标对象要执行的方法的参数
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        // 在实际对象的方法之前加入一些逻辑
        System.out.println("说你好之前，我先挥挥手");

        // 通过这里执行目标对象的方法
        Object object = method.invoke(targer,args);

        // 在实际对象的方法之后加入一些逻辑
        System.out.println("说你好之后，我再给你个飞吻");

        return object;
    }
}
